#pragma once

#include "parameter.h"

void player(char music_name[128])
{
    int ret_val;
    // 创建用于发送控制指令的管道文件
    if (access(FIFO_PATH, F_OK)) // 判断管道文件是否已存在
    {
        ret_val = mkfifo(FIFO_PATH, 0666);
        if (ret_val < 0)
        {
            perror("mkfifo error");
        }
        printf("管道文件创建成功\n");
    }

    //  打开LCD屏
    int lcd_fd = openfd("/dev/fb0", O_RDWR);

    // 打开触摸屏
    int ts_fd = openfd("/dev/input/event0", O_RDONLY);

    struct input_event touch;
    int x = 0;
    int y = 0;
    int run_flag = 0;

    // 直接使用 popen 来播放音视频
    FILE *fp = popen(music_name, "r");
    if (fp == NULL)
    {
        perror("popen error");
    }

    printf("视频正在播放....\n");

    // 打开用于发送指令的管道文件
    int fd_fifo_w = open(FIFO_PATH, O_RDWR); // 用于写
    if (-1 == fd_fifo_w)
    {
        perror("open fifo_w error");
    }

    show_bmp("musicback.bmp", lcd_fd, 0, 0);
    show_bt_bmp("slow.bmp", lcd_fd, 260, 405);
    show_bt_bmp("stop.bmp", lcd_fd, 330, 405);
    show_bt_bmp("termination.bmp", lcd_fd, 400, 405);
    show_bt_bmp("speed.bmp", lcd_fd, 470, 405);
    show_bt_bmp("volume-.bmp", lcd_fd, 540, 405);
    show_bt_bmp("volume+.bmp", lcd_fd, 610, 405);
    usleep(1000);
    while (1)
    {

        // 触摸选择
        read(ts_fd, &touch, sizeof(touch)); // 没触摸的时候。read是堵塞的
        if (touch.type == EV_ABS && touch.code == ABS_X)
            x = touch.value * 800 / 1024; // 判断是不是触摸屏设备，在判断是不是x坐标，
        if (touch.type == EV_ABS && touch.code == ABS_Y)
            y = touch.value * 480 / 600;
        if (touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0) // 判断是否手离开
        {
            if (x >= 260 && x <= 330 && y >= 405) // 后退3s
            {
                send_cmd(fd_fifo_w, "seek -3\n");
            }
            else if (x >= 330 && x <= 400 && y >= 405 && run_flag == 0) // 暂停
            {
                send_cmd(fd_fifo_w, "pause\n");
                show_bt_bmp("play.bmp", lcd_fd, 330, 405);
                run_flag = 1;
            }
            else if (x >= 330 && x <= 400 && y >= 405 && run_flag == 1) // 播放
            {
                send_cmd(fd_fifo_w, "pause\n");
                show_bt_bmp("stop.bmp", lcd_fd, 330, 405);
                run_flag = 0;
            }
            else if (x >= 400 && x <= 470 && y >= 405) // 退出
            {
                // flag = MENU;
                send_cmd(fd_fifo_w, "quit\n");
                close(lcd_fd);
                close(ts_fd);
                sleep(1);
                break;
            }
            else if (x >= 470 && x <= 540 && y >= 405) // 快进3s
            {
                send_cmd(fd_fifo_w, "seek +3\n");
            }
            else if (x >= 540 && x <= 610 && y >= 405) // 声音+
            {
                send_cmd(fd_fifo_w, "volume -20\n");
                show_bmp("-.bmp", lcd_fd, 240, 200);
                show_bmp("musicback.bmp", lcd_fd, 0, 0);
                show_bt_bmp("slow.bmp", lcd_fd, 260, 405);
                show_bt_bmp("stop.bmp", lcd_fd, 330, 405);
                show_bt_bmp("termination.bmp", lcd_fd, 400, 405);
                show_bt_bmp("speed.bmp", lcd_fd, 470, 405);
                show_bt_bmp("volume-.bmp", lcd_fd, 540, 405);
                show_bt_bmp("volume+.bmp", lcd_fd, 610, 405);
            }
            else if (x >= 610 && x <= 680 && y >= 405) // 声音-
            {
                send_cmd(fd_fifo_w, "volume +20\n");
                show_bmp("+.bmp", lcd_fd, 240, 200);
                show_bmp("musicback.bmp", lcd_fd, 0, 0);
                show_bt_bmp("slow.bmp", lcd_fd, 260, 405);
                show_bt_bmp("stop.bmp", lcd_fd, 330, 405);
                show_bt_bmp("termination.bmp", lcd_fd, 400, 405);
                show_bt_bmp("speed.bmp", lcd_fd, 470, 405);
                show_bt_bmp("volume-.bmp", lcd_fd, 540, 405);
                show_bt_bmp("volume+.bmp", lcd_fd, 610, 405);
            }
        }
    }
}

void *music_func(void *args)
{
    pthread_detach(pthread_self());
    char *msg = (char *)args;
    printf("%s\n", msg);

    //  打开LCD屏
    int lcd_fd = openfd("/dev/fb0", O_RDWR);

    // 打开触摸屏
    int ts_fd = openfd("/dev/input/event0", O_RDONLY);

    struct input_event touch;
    int x = 0, y = 0;
    int run_flag = 0;

    int flag_1 = 0;
    printf("选择");
    // 触摸选择
    while (1)
    {
        if (flag_1 == 0)
        {
            show_bmp("musicback2.bmp", lcd_fd, 0, 0);
            show_bmp("tx.bmp", lcd_fd, 80, 100);
            show_bmp("gem.bmp", lcd_fd, 310, 100);
            show_bmp("sn.bmp", lcd_fd, 540, 100);
            flag_1 = 1;
        }

        read(ts_fd, &touch, sizeof(touch)); // 没触摸的时候。read是堵塞的
        if (touch.type == EV_ABS && touch.code == ABS_X)
            x = touch.value * 800 / 1024; // 判断是不是触摸屏设备，在判断是不是x坐标，
        if (touch.type == EV_ABS && touch.code == ABS_Y)
            y = touch.value * 480 / 600;
        if (touch.type == EV_KEY && touch.code == BTN_TOUCH && touch.value == 0) // 判断是否手离开
        {
            if (x >= 0 && x <= 70 && y >= 0 && y <= 70)
            {
                flag = MENU;
                close(lcd_fd);
                close(ts_fd);
                break;
            }
            else if (x >= 80 && x <= 230 && y >= 100 && y <= 380) // 第一首
            {
                player(music_name[0]);
                printf("music1 exit\n");
                flag_1 = 0;
            }
            else if (x >= 310 && x <= 490 && y >= 100 && y <= 380) // 第二首
            {
                player(music_name[1]);
                printf("music2 exit\n");
                flag_1 = 0;
            }
            else if (x >= 540 && x <= 720 && y >= 100 && y <= 380) // 第三首
            {
                player(music_name[2]);
                printf("music3 exit\n");
                flag_1 = 0;
            }
        }
    }

    close(lcd_fd);
    close(ts_fd);
}